home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 2
/
Meeting Pearls Vol. II (1995)(GTI - Schatztruhe)[!].iso
/
Pearls
/
dev
/
GUI
/
BGUI
/
demos
/
bguidemo.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-10-05
|
64KB
|
1,118 lines
;/* Execute me to compile with DICE V3.0
dcc bguidemo.c -proto -mi -ms -mRR -lbgui
quit
*/
/*
** $RCSfile: bguidemo.c,v $
** Description: A small demonstration.
** Copyright: (C) Copyright 1994 Jaba Development.
** (C) Copyright 1994 Jan van den Baard.
** All Rights Reserved.
**
** $Author: jaba $
** $Revision: 1.12 $
** $Date: 1994/10/02 14:57:30 $
**/
#include <exec/types.h>
#include <exec/memory.h>
#include <libraries/gadtools.h>
#include <dos/dos.h>
#include <workbench/workbench.h>
#include <workbench/startup.h>
#include <libraries/bgui.h>
#include <libraries/bgui_macros.h>
#include <clib/alib_protos.h>
#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/dos.h>
#include <proto/bgui.h>
#include <stdio.h>
/*
** Online-Help texts.
**/
UBYTE *MainHelp = ISEQ_C "BGUI is a shared library which offers a set of\n"
"BOOPSI classes to allow for easy and flexible GUI creation.\n\n"
"The main window is also an AppWindow. Drop some icons\n"
"on it and see what happens.\n\n"
"All other windows in this demo also have online-help. To access\n"
"this help press the " ISEQ_B "HELP" ISEQ_N " key while the window is active.";
UBYTE *GroupsHelp = ISEQ_C "The BGUI layout engine is encapsulated in the groupclass.\n"
"The groupclass will layout all of it's members into a specific area.\n"
"You can pass layout specific attributes to all group members\n"
"which allows for flexible and powerful layout capabilities.";
UBYTE *NotifHelp = ISEQ_C "Notification can be used to let an object keep one or\n"
"more other objects informed about it's status. BGUI offers several\n"
"kinds of notification of which two (conditional and map-list) are\n"
"shown in this demonstration.";
UBYTE *InfoHelp = ISEQ_C "Not much more can be said about the BGUI infoclass than\n"
"is said in this window. Except maybe that this text is shown in an\n"
"infoclass object as are all body texts from a BGUI requester.";
UBYTE *ImageHelp = ISEQ_C "This window shows you the built-in images that BGUI has\n"
"to offer. Ofcourse these images are all scalable and it is possible\n"
"to create your own, scalable, imagery with the BGUI vectorclass.";
UBYTE *BackfillHelp = ISEQ_C "Here you see the built-in backfill patterns BGUI supports.\n"
"These backfill patterns can all be used in groups and frames. The frameclass\n"
"also offers you the possibility to add hooks for custom backfills and\n"
"frame rendering.";
UBYTE *PagesHelp = ISEQ_C "The pageclass allows you to setup a set of pages containing\n"
"BGUI gadgets or groups. This will give you the oppertunity to\n"
"have several set's of gadgets in a single window.";
/*
** Window objects.
**/
Object *WA_Main = NULL, *WA_Groups = NULL, *WA_Notif = NULL;
Object *WA_Info = NULL, *WA_Image = NULL, *WA_BFill = NULL;
Object *WA_Pages = NULL;
/*
** Gadget objects from the main window.
**/
Object *BT_Groups, *BT_Notif, *BT_Quit;
Object *BT_Info, *BT_Images, *BT_BFill;
Object *BT_Pages, *BT_IconDone, *BT_IconQuit;
Object *LV_IconList, *PG_Pager;
/*
** Menus & gadget ID's.
**/
#define ID_ABOUT 1L
#define ID_QUIT 2L
/*
** A small menu strip.
**/
struct NewMenu MainMenus[] = {
Title( "Project" ),
Item( "About...", "?", ID_ABOUT ),
ItemBar,
Item( "Quit", "Q", ID_QUIT ),
End
};
/*
** Put up a simple requester.
**/
ULONG Req( struct Window *win, UBYTE *gadgets, UBYTE *body, ... )
{
struct bguiRequest req = { NULL };
req.br_GadgetFormat = gadgets;
req.br_TextFormat = body;
req.br_Flags = BREQF_CENTERWINDOW|BREQF_XEN_BUTTONS;
return( BGUI_RequestA( win, &req, ( ULONG * )( &body + 1 )));
}
/*
** Main window button ID's.
**/
#define ID_MAIN_GROUPS 3L
#define ID_MAIN_NOTIF 4L
#define ID_MAIN_INFO 5L
#define ID_MAIN_IMAGE 6L
#define ID_MAIN_BFILL 7L
#define ID_MAIN_PAGES 8L
#define ID_MAIN_ICON_CONT 9L
/*
** Open main window.
**/
struct Window *OpenMainWindow( ULONG *sigmask, ULONG *appmask )
{
struct Window *window = NULL;
WA_Main = WindowObject,
WINDOW_Title, "BGUIDemo - (C) Jaba Development.",
WINDOW_ScreenTitle, "BGUIDemo - (C) Copyright 1993-1994 Jaba Development.",
WINDOW_MenuStrip, MainMenus,
WINDOW_SmartRefresh, TRUE,
WINDOW_AppWindow, TRUE,
WINDOW_SizeGadget, FALSE,
WINDOW_HelpText, MainHelp,
WINDOW_MasterGroup,
VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
StartMember,
PG_Pager = PageObject,
/*
** Main page.
**/
PageMember,
VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
StartMember,
InfoObject,
INFO_TextFormat, ISEQ_C
"BGUIDemo\n"
ISEQ_HIGHLIGHT
ISEQ_B
"(C) Copyright 1993-1994 Jaba Development"
ISEQ_TEXT
ISEQ_N
"\n\n"
"Press the HELP key for more info.",
INFO_FixTextWidth, TRUE,
INFO_MinLines, 4,
INFO_HorizOffset, 13,
FRM_Type, FRTYPE_NEXT,
EndObject,
EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember,
VGroupObject, Spacing( 4 ),
StartMember, BT_Groups = XenKeyButton( "_Groups", ID_MAIN_GROUPS ), EndMember,
StartMember, BT_Notif = XenKeyButton( "_Notification", ID_MAIN_NOTIF ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject,
EndMember,
StartMember,
VGroupObject, Spacing( 4 ),
StartMember, BT_Images = XenKeyButton( "_Images", ID_MAIN_IMAGE ), EndMember,
StartMember, BT_BFill = XenKeyButton( "_BackFill", ID_MAIN_BFILL ), EndMember,
StartMember, BT_Quit = XenKeyButton( "_Quit", ID_QUIT ), EndMember,
EndObject,
EndMember,
StartMember,
VGroupObject, Spacing( 4 ),
StartMember, BT_Pages = XenKeyButton( "_Pages", ID_MAIN_PAGES ), EndMember,
StartMember, BT_Info = XenKeyButton( "Info_Class", ID_MAIN_INFO ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject,
EndMember,
EndObject, FixMinHeight,
EndMember,
EndObject,
/*
** Icon-drop list page.
**/
PageMember,
VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
StartMember,
InfoObject,
INFO_TextFormat, ISEQ_C
"The following icons where dropped\n"
"in the window.",
INFO_FixTextWidth, TRUE,
INFO_MinLines, 2,
INFO_HorizOffset, 13,
FRM_Type, FRTYPE_BUTTON,
FRM_Recessed, TRUE,
EndObject, FixMinHeight,
EndMember,
StartMember,
LV_IconList = ListviewObject,
LISTV_ReadOnly, TRUE,
EndObject,
EndMember,
StartMember,
HGroupObject,
StartMember, BT_IconDone = XenKeyButton( "_Continue", ID_MAIN_ICON_CONT ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
StartMember, BT_IconQuit = XenKeyButton( "_Quit", ID_QUIT ), EndMember,
EndObject, FixMinHeight,
EndMember,
EndObject,
EndObject,
EndMember,
EndObject,
EndObject;
/*
** Object created OK?
**/
if ( WA_Main ) {
/*
** Add keys to the buttons.
**/
GadgetKey( WA_Main, BT_Groups, "g" );
GadgetKey( WA_Main, BT_Notif, "n" );
GadgetKey( WA_Main, BT_Info, "c" );
GadgetKey( WA_Main, BT_Images, "i" );
GadgetKey( WA_Main, BT_BFill, "b" );
GadgetKey( WA_Main, BT_Pages, "p" );
GadgetKey( WA_Main, BT_Quit, "q" );
GadgetKey( WA_Main, BT_IconDone, "c" );
GadgetKey( WA_Main, BT_IconQuit, "q" );
/*
** Open the window.
**/
if ( window = WindowOpen( WA_Main )) {
/*
** Obtain signal masks.
**/
GetAttr( WINDOW_SigMask, WA_Main, sigmask );
GetAttr( WINDOW_AppMask, WA_Main, appmask );
}
}
return( window );
}
/*
** Macros for the group objects. GObj() creates
** a simple infoclass object with some text in
** it. TObj() creates a simple groupclass object
** with a button frame.
**/
#define GObj(t)\
InfoObject,\
INFO_TextFormat, t,\
INFO_FixTextWidth, TRUE,\
INFO_HorizOffset, 4,\
INFO_VertOffset, 3,\
ButtonFrame,\
FRM_Flags, FRF_RECESSED,\
EndObject
#define TObj\
HGroupObject, HOffset( 3 ), VOffset( 2 ),\
ButtonFrame,\
FRM_Flags, FRF_RECESSED,\
EndObject
/*
** Open up the groups window.
**/
struct Window *OpenGroupsWindow( ULONG *sigmask )
{
struct Window *window = NULL;
/*
** If the object has not been created
** already we build it.
**/
if ( ! WA_Groups ) {
WA_Groups = WindowObject,
WINDOW_Title, "BGUI Groups",
WINDOW_RMBTrap, TRUE,
WINDOW_SmartRefresh, TRUE,
WINDOW_HelpText, GroupsHelp,
WINDOW_MasterGroup,
VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
StartMember,
HGroupObject, Spacing( 4 ),
StartMember,
HGroupObject, NeXTFrame, FrameTitle( "Horizontal" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
EndObject,
EndMember,
StartMember,
VGroupObject, NeXTFrame, FrameTitle( "Vertical" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
EndObject,
EndMember,
StartMember,
VGroupObject, NeXTFrame, FrameTitle( "Grid" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
EndObject,
EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
EndObject,
EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
StartMember, TObj, EndMember,
EndObject,
EndMember,
EndObject,
EndMember,
EndObject,
EndMember,
StartMember,
VGroupObject, Spacing( 4 ),
StartMember, TitleSeperator( "Free, Fixed and Weight sizes." ), EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, GObj( ISEQ_C "25Kg" ), Weight( 25 ), EndMember,
StartMember, GObj( ISEQ_C "50Kg" ), Weight( 50 ), EndMember,
StartMember, GObj( ISEQ_C "75Kg" ), Weight( 75 ), EndMember,
StartMember, GObj( ISEQ_C "100Kg" ), Weight( 100 ), EndMember,
EndObject,
EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, GObj( ISEQ_C "Free" ), EndMember,
StartMember, GObj( "Fixed" ), FixMinWidth, EndMember,
StartMember, GObj( ISEQ_C "Free" ), EndMember,
StartMember, GObj( "Fixed" ), FixMinWidth, EndMember,
EndObject,
EndMember,
EndObject, FixMinHeight,
EndMember,
EndObject,
EndObject;
}
/*
** Object OK?
**/
if ( WA_Groups ) {
/*
** Open the window.
**/
if ( window = WindowOpen( WA_Groups ))
/*
** Obtain signal mask.
**/
GetAttr( WINDOW_SigMask, WA_Groups, sigmask );
}
return( window );
}
/*
** Cycle gadget labels.
**/
UBYTE *NotifLabels[] = { "Enabled-->", "Disabled-->", "Still Disabled-->", NULL };
/*
** Notification map-lists.
**/
ULONG pga2sl[] = { PGA_Top, SLIDER_Level, TAG_END };
ULONG sl2prg[] = { SLIDER_Level, PROGRESS_Done, TAG_END };
ULONG prg2in[] = { PROGRESS_Done, INDIC_Level, TAG_END };
/*
** Open the notification window.
**/
struct Window *OpenNotifWindow( ULONG *sigmask )
{
struct Window *window = NULL;
Object *c, *b, *p1, *p2, *s1, *s2, *p, *i1, *i2;
/*
** Not created yet? Create it now!
**/
if ( ! WA_Notif ) {
WA_Notif = WindowObject,
WINDOW_Title, "BGUI notification",
WINDOW_RMBTrap, TRUE,
WINDOW_SmartRefresh, TRUE,
WINDOW_HelpText, NotifHelp,
WINDOW_MasterGroup,
VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
StartMember, TitleSeperator( "Conditional" ), EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, c = XenCycle( NULL, NotifLabels, 0, 0 ), EndMember,
StartMember, b = XenButton( "Target", 0 ), EndMember,
EndObject, FixMinHeight,
EndMember,
StartMember, TitleSeperator( "Map-List" ), EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember,
VGroupObject, Spacing( 4 ),
StartMember, i1 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
StartMember, p1 = HorizProgress( NULL, 0, 100, 0 ), EndMember,
EndObject,
EndMember,
StartMember, s1 = VertSlider( NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
StartMember, p = VertScroller( NULL, 0, 101, 1, 0 ), FixWidth( 16 ), EndMember,
StartMember, s2 = VertSlider( NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
StartMember,
VGroupObject, Spacing( 4 ),
StartMember, i2 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
StartMember, p2 = VertProgress( NULL, 0, 100, 0 ), EndMember,
EndObject,
EndMember,
EndObject,
EndMember,
EndObject,
EndObject;
if ( WA_Notif ) {
/*
** Connect the cycle object with the button.
**/
AddCondit( c, b, CYC_Active, 0, GA_Disabled, FALSE, GA_Disabled, TRUE );
/*
** Connect sliders, prop, progression and indicators.
**/
AddMap( s1, p1, sl2prg );
AddMap( s2, p2, sl2prg );
AddMap( p, s1, pga2sl );
AddMap( p, s2, pga2sl );
AddMap( p1, i1, prg2in );
AddMap( p2, i2, prg2in );
}
}
/*
** Object OK?
**/
if ( WA_Notif ) {
/*
** Open window.
**/
if ( window = WindowOpen( WA_Notif ))
/*
** Obtain signal mask.
**/
GetAttr( WINDOW_SigMask, WA_Notif, sigmask );
}
return( window );
}
/*
** Open infoclass window.
**/
struct Window *OpenInfoWindow( ULONG *sigmask )
{
struct Window *window = NULL;
ULONG args[2];
/*
** Setup arguments for the
** infoclass object.
**/
args[0] = AvailMem( MEMF_CHIP );
args[1] = AvailMem( MEMF_FAST );
/*
** Not created already?
**/
if ( ! WA_Info ) {
WA_Info = WindowObject,
WINDOW_Title, "BGUI information class",
WINDOW_RMBTrap, TRUE,
WINDOW_SmartRefresh, TRUE,
WINDOW_HelpText, InfoHelp,
WINDOW_MasterGroup,
VGroupObject, HOffset( 4 ), VOffset( 4 ),
StartMember,
InfoFixed( NULL,
ISEQ_C "BGUI offers the InfoClass.\n"
"This class is a text display class which\n"
"allows things like:\n\n"
ISEQ_SHINE "C"
ISEQ_SHADOW "o"
ISEQ_FILL "l"
ISEQ_FILLTEXT "o"
ISEQ_HIGHLIGHT "r"
ISEQ_TEXT "s\n\n"
ISEQ_L "Left Aligned...\n"
ISEQ_R "Right Aligned...\n"
ISEQ_C "Centered...\n\n"
ISEQ_B "Bold...\n" ISEQ_N
ISEQ_I "Italic...\n" ISEQ_N
ISEQ_U "Underlined...\n\n"
ISEQ_B ISEQ_I "And combinations!\n\n"
ISEQ_N "Free CHIP:" ISEQ_SHINE " %ld" ISEQ_TEXT", Free FAST:" ISEQ_SHINE " %ld\n",
&args[ 0 ],
17 ),
EndMember,
EndObject,
EndObject;
}
/*
** Object OK?
**/
if ( WA_Info ) {
/*
** Open window.
**/
if ( window = WindowOpen( WA_Info ))
/*
** Obtain signal mask.
**/
GetAttr( WINDOW_SigMask, WA_Info, sigmask );
}
return( window );
}
/*
** Open images window.
**/
struct Window *OpenImageWindow( ULONG *sigmask )
{
struct Window *window = NULL;
/*
** Not yet created?
**/
if ( ! WA_Image ) {
WA_Image = WindowObject,
WINDOW_Title, "BGUI images",
WINDOW_RMBTrap, TRUE,
WINDOW_SmartRefresh, TRUE,
WINDOW_HelpText, ImageHelp,
WINDOW_MasterGroup,
VGroupObject, HOffset( 4 ), VOffset( 4 ),
StartMember,
HGroupObject, NeXTFrame, FrameTitle( "Fixed size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
VarSpace( DEFAULT_WEIGHT ),
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH, ButtonFrame, EndObject, FixWidth( GETPATH_WIDTH ), FixHeight( GETPATH_HEIGHT ), EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE, ButtonFrame, EndObject, FixWidth( GETFILE_WIDTH ), FixHeight( GETFILE_HEIGHT ), EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK, ButtonFrame, EndObject, FixWidth( CHECKMARK_WIDTH ), FixHeight( CHECKMARK_HEIGHT ), EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP, ButtonFrame, EndObject, FixWidth( POPUP_WIDTH ), FixHeight( POPUP_HEIGHT ), EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP, ButtonFrame, EndObject, FixWidth( ARROW_UP_WIDTH ), FixHeight( ARROW_UP_HEIGHT ), EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN, ButtonFrame, EndObject, FixWidth( ARROW_DOWN_WIDTH ), FixHeight( ARROW_DOWN_HEIGHT ), EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT, ButtonFrame, EndObject, FixWidth( ARROW_LEFT_WIDTH ), FixHeight( ARROW_LEFT_HEIGHT ), EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, FixWidth( ARROW_RIGHT_WIDTH ), FixHeight( ARROW_RIGHT_HEIGHT ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject, FixMinHeight,
EndMember,
StartMember,
HGroupObject, NeXTFrame, FrameTitle( "Free size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH, ButtonFrame, EndObject, EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE, ButtonFrame, EndObject, EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK, ButtonFrame, EndObject, EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP, ButtonFrame, EndObject, EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP, ButtonFrame, EndObject, EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN, ButtonFrame, EndObject, EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT, ButtonFrame, EndObject, EndMember,
StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, EndMember,
EndObject,
EndMember,
EndObject,
EndObject;
}
/*
** Object OK?
**/
if ( WA_Image ) {
/*
** Open the window.
**/
if ( window = WindowOpen( WA_Image ))
/*
** Obtain signal mask.
**/
GetAttr( WINDOW_SigMask, WA_Image, sigmask );
}
return( window );
}
/*
** Open back-fill window.
**/
struct Window *OpenFillWindow( ULONG *sigmask )
{
struct Window *window = NULL;
/*
** Not yet created?
**/
if ( ! WA_BFill ) {
WA_BFill = WindowObject,
WINDOW_Title, "BGUI back fill patterns",
WINDOW_RMBTrap, TRUE,
WINDOW_SmartRefresh, TRUE,
WINDOW_HelpText, BackfillHelp,
WINDOW_MasterGroup,
VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, InfoObject, ButtonFrame, ShineRaster, EndObject, EndMember,
StartMember, InfoObject, ButtonFrame, ShadowRaster, EndObject, EndMember,
EndObject,
EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, InfoObject, ButtonFrame, ShineShadowRaster, EndObject, EndMember,
StartMember, InfoObject, ButtonFrame, FillRaster, EndObject, EndMember,
EndObject,
EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, InfoObject, ButtonFrame, ShineFillRaster, EndObject, EndMember,
StartMember, InfoObject, ButtonFrame, ShadowFillRaster, EndObject, EndMember,
EndObject,
EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
StartMember, InfoObject, ButtonFrame, ShineBlock, EndObject, EndMember,
StartMember, InfoObject, ButtonFrame, ShadowBlock, EndObject, EndMember,
EndObject,
EndMember,
EndObject,
EndObject;
}
/*
** Object OK?
**/
if ( WA_BFill ) {
/*
** Open window.
**/
if ( window = WindowOpen( WA_BFill ))
/*
** Obtain signal mask.
**/
GetAttr( WINDOW_SigMask, WA_BFill, sigmask );
}
return( window );
}
/*
** Cycle and Mx labels.
**/
UBYTE *PageLab[] = { "Buttons", "Strings", "CheckBoxes", "Radio-Buttons", NULL };
UBYTE *MxLab[] = { "MX #1", "MX #2", "MX #3", "MX #4", NULL };
/*
** Cycle to Page map-list.
**/
ULONG Cyc2Page[] = { CYC_Active, PAGE_Active, TAG_END };
/*
** Open pages window.
**/
struct Window *OpenPagesWindow( ULONG *sigmask )
{
Object *c, *p, *m, *s1, *s2, *s3;
struct Window *window = NULL;
/*
** Not yet created?
**/
if ( ! WA_Pages ) {
WA_Pages = WindowObject,
WINDOW_Title, "BGUI pages",
WINDOW_RMBTrap, TRUE,
WINDOW_SmartRefresh, TRUE,
WINDOW_HelpText, PagesHelp,
WINDOW_MasterGroup,
VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
StartMember, c = XenKeyPopCycle( "_Page:", PageLab, 0, 0 ), FixMinHeight, EndMember,
StartMember,
p = PageObject,
/*
** Button page.
**/
PageMember,
VGroupObject, Spacing(4),
StartMember, TitleSeperator( "Buttons" ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
StartMember, XenButton( "Button #1", 0 ), FixMinHeight, EndMember,
StartMember, XenButton( "Button #2", 0 ), FixMinHeight, EndMember,
StartMember, XenButton( "Button #3", 0 ), FixMinHeight, EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject,
/*
** String page.
**/
PageMember,
VGroupObject, Spacing(4),
StartMember, TitleSeperator( "Strings" ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
StartMember, s1 = String( "String #1", "", 256, 0 ), FixMinHeight, EndMember,
StartMember, s2 = String( "String #2", "", 256, 0 ), FixMinHeight, EndMember,
StartMember, s3 = String( "String #3", "", 256, 0 ), FixMinHeight, EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject,
/*
** CheckBox page.
**/
PageMember,
VGroupObject, Spacing(4),
StartMember, TitleSeperator( "CheckBoxes" ), EndMember,
StartMember,
HGroupObject, Spacing( 4 ),
VarSpace( DEFAULT_WEIGHT ),
StartMember,
VGroupObject, Spacing( 4 ),
VarSpace( DEFAULT_WEIGHT ),
StartMember, CheckBox( "CheckBox #1", FALSE, 0 ), EndMember,
StartMember, CheckBox( "CheckBox #2", FALSE, 0 ), EndMember,
StartMember, CheckBox( "CheckBox #3", FALSE, 0 ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject, FixMinWidth,
EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject,
EndMember,
EndObject,
/*
** Mx page.
**/
PageMember,
VGroupObject, Spacing(4),
StartMember, TitleSeperator( "Radio-Buttons" ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
StartMember,
HGroupObject,
VarSpace( DEFAULT_WEIGHT ),
StartMember, m = LeftMxKey( NULL, MxLab, 0, 0 ), EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject, FixMinHeight,
EndMember,
VarSpace( DEFAULT_WEIGHT ),
EndObject,
EndObject,
EndMember,
EndObject,
EndObject;
/*
** Object OK?
**/
if ( WA_Pages ) {
/*
** Connect the cycle to the page.
**/
AddMap( c, p, Cyc2Page );
/*
** Set tab-cycling order.
**/
DoMethod( WA_Pages, WM_TABCYCLE_ORDER, s1, s2, s3, NULL );
/*
** Add a key to the cycle object.
**/
GadgetKey( WA_Pages, c, "p" );
}
}
/*
** Object OK?
**/
if ( WA_Pages ) {
/*
** Open the window.
**/
if ( window = WindowOpen( WA_Pages ))
/*
** Obtain signal mask.
**/
GetAttr( WINDOW_SigMask, WA_Pages, sigmask );
}
return( window );
}
/*
** Main entry.
**/
void main( int argc, char *argv[] )
{
struct Window *main = NULL, *groups = NULL, *notif = NULL, *info = NULL, *image = NULL, *bfill = NULL, *pages = NULL;
struct AppMessage *apm;
struct WBArg *ap;
ULONG mainsig = 0L, groupssig = 0L, notifsig = 0L, infosig = 0L, imagesig = 0L, bfillsig = 0L, pagessig = 0L, appsig = 0L;
ULONG sigmask = 0L, sigrec, rc, i;
BOOL running = TRUE;
UBYTE name[ 256 ];
/*
** Open the main window.
**/
if ( main = OpenMainWindow( &mainsig, &appsig )) {
/*
** OR signal masks.
**/
sigmask |= mainsig | appsig;
/*
** Loop...
**/
do {
/*
** Wait for the signals to come.
**/
sigrec = Wait( sigmask );
/*
** AppWindow signal?
**/
if ( sigrec & appsig ) {
/*
** Obtain AppWindow messages.
**/
while ( apm = GetAppMsg( WA_Main )) {
/*
** Get all dropped icons.
**/
for ( ap = apm->am_ArgList, i = 0; i < apm->am_NumArgs; i++, ap++ ) {
/*
** Build fully qualified name.
**/
NameFromLock( ap->wa_Lock, name, 256 );
AddPart( name, ap->wa_Name, 256 );
/*
** Add it to the listview.
**/
AddEntry( main, LV_IconList, (APTR)name, LVAP_SORTED );
}
/*
** Important! We must reply the message!
**/
ReplyMsg(( struct Message * )apm );
}
/*
** Switch to the Icon page.
**/
SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 1, TAG_END );
}
/*
** Main window signal?
**/
if ( sigrec & mainsig ) {
/*
** Call the main-window event handler.
**/
while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
case ID_QUIT:
running = FALSE;
break;
case ID_ABOUT:
Req( main, "OK", "\33c\33b\33d8BGUIDemo\33n\33d2\n(C) Copyright 1993-1994 Jaba Development" );
break;
case ID_MAIN_GROUPS:
/*
** Open groups window.
**/
if ( ! groups ) {
if ( groups = OpenGroupsWindow( &groupssig ))
sigmask |= groupssig;
}
break;
case ID_MAIN_NOTIF:
/*
** Open notification window.
**/
if ( ! notif ) {
if ( notif = OpenNotifWindow( ¬ifsig ))
sigmask |= notifsig;
}
break;
case ID_MAIN_INFO:
/*
** Open infoclass window.
**/
if ( ! info ) {
if ( info = OpenInfoWindow( &infosig ))
sigmask |= infosig;
}
break;
case ID_MAIN_IMAGE:
/*
** Open images window.
**/
if ( ! image ) {
if ( image = OpenImageWindow( &imagesig ))
sigmask |= imagesig;
}
break;
case ID_MAIN_BFILL:
/*
** Open backfill window.
**/
if ( ! bfill ) {
if ( bfill = OpenFillWindow( &bfillsig ))
sigmask |= bfillsig;
}
break;
case ID_MAIN_PAGES:
/*
** Open pages window.
**/
if ( ! pages ) {
if ( pages = OpenPagesWindow( &pagessig ))
sigmask |= pagessig;
}
break;
case ID_MAIN_ICON_CONT:
/*
** Switch back to the main page.
**/
SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 0, TAG_END );
/*
** Clear all entries from the listview.
**/
ClearList( main, LV_IconList );
break;
}
}
}
/*
** The code below will close the
** specific window.
**/
if ( sigrec & groupssig ) {
while (( rc = HandleEvent( WA_Groups )) != WMHI_NOMORE ) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
WindowClose( WA_Groups );
sigmask &= ~groupssig;
groupssig = 0L;
groups = NULL;
break;
}
}
}
if ( sigrec & notifsig ) {
while (( rc = HandleEvent( WA_Notif )) != WMHI_NOMORE ) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
WindowClose( WA_Notif );
sigmask &= ~notifsig;
notifsig = 0L;
notif = NULL;
break;
}
}
}
if ( sigrec & infosig ) {
while (( rc = HandleEvent( WA_Info )) != WMHI_NOMORE ) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
WindowClose( WA_Info );
sigmask &= ~infosig;
infosig = 0L;
info = NULL;
break;
}
}
}
if ( sigrec & imagesig ) {
while (( rc = HandleEvent( WA_Image )) != WMHI_NOMORE ) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
WindowClose( WA_Image );
sigmask &= ~imagesig;
imagesig = 0L;
image = NULL;
break;
}
}
}
if ( sigrec & bfillsig ) {
while (( rc = HandleEvent( WA_BFill )) != WMHI_NOMORE ) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
WindowClose( WA_BFill );
sigmask &= ~bfillsig;
bfillsig = 0L;
bfill = NULL;
break;
}
}
}
if ( sigrec & pagessig ) {
while (( rc = HandleEvent( WA_Pages )) != WMHI_NOMORE ) {
switch ( rc ) {
case WMHI_CLOSEWINDOW:
WindowClose( WA_Pages );
sigmask &= ~pagessig;
pagessig = 0L;
pages = NULL;
break;
}
}
}
} while ( running );
}
/*
** Dispose of all window objects.
**/
if ( WA_Pages ) DisposeObject( WA_Pages );
if ( WA_BFill ) DisposeObject( WA_BFill );
if ( WA_Image ) DisposeObject( WA_Image );
if ( WA_Info ) DisposeObject( WA_Info );
if ( WA_Notif ) DisposeObject( WA_Notif );
if ( WA_Groups ) DisposeObject( WA_Groups );
if ( WA_Main ) DisposeObject( WA_Main );
}
/*
** DICE stuff.
**/
#ifdef _DCC
int wbmain( struct WBStartup *wbs )
{
return( main( 0, NULL ));
}
#endif
/*
* $Log: bguidemo.c,v $
* Revision 1.12 1994/10/02 14:57:30 jaba
* Added online-help to all windows.
*
* Revision 1.11 1994/09/29 20:14:37 jaba
* Cleaned it up a little.
*
* Revision 1.10 1994/09/29 18:35:54 jaba
* Enhanced the icon-drop thinggy.
*
* Revision 1.9 1994/08/03 11:16:20 jaba
* Switch to proto/ instead of clib/.
*
* Revision 1.8 1994/07/25 20:08:47 jaba
* Added some group seperators.
*
* Revision 1.7 1994/07/19 19:52:25 jaba
* Fixed a positioning bug in the pages window.
*
* Revision 1.6 1994/07/18 17:44:16 jaba
* Removed the sizing gadget from the main window.
*
* Revision 1.5 1994/07/16 18:21:04 jaba
* Added the BREQF_XEN_BUTTONS flag to the BGUI_RequestA() routine.
*
* Revision 1.4 1994/07/16 18:04:39 jaba
* Added a backfill pattern in the main-window.
*
* Revision 1.3 1994/07/16 13:16:37 jaba
* Added a Free chip&fast display to the InfoClass window
* to show the possibility of C-style formatting codes in
* an InfoClass object.
*
* Revision 1.2 1994/07/16 12:17:38 jaba
* Added some more XEN stuff.
*
* Revision 1.1 1994/07/16 11:09:12 jaba
* Initial revision
*
*/